def dfs(x):
    # 第depth的皇后
    if x == n:
        global ans
        ans += 1
        return

        # 第x层的皇后枚举每一列


    for y in range(1, n + 1):
        # 当前坐标为（x,y）,要求当前列，主对角线，副对角线不能被攻击
        if vis1[y] or vis2[x + y] or vis3[x - y + n]:
            continue
        # 此时（x,y) 是合法点
        # 打标记，进入下一层搜索，回到该层，清空标记
        vis1[y] = vis2[x + y] = vis3[x - y + n] = True
        dfs(x + 1)
        vis1[y] = vis2[x + y] = vis3[x - y + n] = False

n = int(input())
# 表示当前列，主对角线，副对角线是否被标记
vis1 = [False] * (n + 1)
vis2 = [False] * (2 * n + 1)
vis3 = [False] * (2 * n + 1)
ans = 0
dfs(0)
print(ans)